/******************************************************************************
 * The contents of this file are subject to the   JDI License  Version 1.0
 * ("License"); You may not use this file except in compliance with the License
 * Software distributed under the License is distributed on an  "AS IS"  basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * The Initial Developer of the Original Code is 陈慧然. Portions created by 
 * 陈慧然 are Copyright 陈慧然.
 * All Rights Reserved.
 *
 *              Contact john_holen@163.com for licensing alternatives.
 *
 *****************************************************************************/


package org.peony.standard.ui;

import org.peony.exceptions.RenderException;


/**
 *  客户端布局管理器接口。
 *  <br>V0.010:
 *  <li>设想是将该接口作为CS接口客户端和BS结构客户端界面布局管理器的根接口。
 *  <li>基于Swing实现的CS客户端与Bs实现的客户端界面布局的相似性，觉得使用布局管理器接口是有必要的。
 *  <li>尚未定义标准服务。
 *
 *  @author     陈慧然
 *  @version    Id: SILayOut.java, v 0.010 2008-4-15 下午10:11:32 陈慧然 Exp
 */
public interface SILayOut{
	/**
	 * 布局样式 垂直顺序式布局
	 */
	public static final int LAYOUT_FLOW_VERTICAL = 100;
	/**
	 * 布局样式 水平顺序式布局
	 */
	public static final int LAYOUT_FLOW_HORIZONTAL = 150;
	/**
	 * 布局样式 环形布局
	 */
	public static final int LAYOUT_ROUND = 200;
	
	/**
	 * 表示布局某布局位置放置的为容器
	 */
	public static final int ISCONTAINER = -100;
	/**
	 * 表示布局某布局位置放置的为组件
	 */
	public static final int ISCOMPONENT = -200;
	
	
	/**
	 * 向布局中增加一个组件。当布局位置不存在的情况下抛出RenderException异常。
	 * @param component
	 * SIComponent ，组件
	 * @param position
	 * int， 组件要占用的布局位置。
	 * @throws RenderException
	 */
	public void add(SIComponent component, String position) throws RenderException;
	/**
	 * 向布局中增加一个容器。当布局位置不存在的情况下抛出RenderException异常。
	 * @param container
	 * SIContainer, 容器
	 * @param position
	 * int, 被加入的容器占用父容器的布局位置。
	 * @throws RenderException
	 */
	public void add(SIContainer container, String position) throws RenderException;
	/**
	 * 清除布局中一个布局位置的内容。当布局位置不存在的情况下抛出RenderException异常。
	 * @param position
	 * int，要被清除的布局位置。
	 * @throws RenderException
	 */
	public void clear(String position) throws RenderException;
	/**
	 * 判断布局中某个布局位置是否为空置状态。
	 * @param position
	 * @return
	 */
	public boolean isEmpty(String position);
	/**
	 * 清除布局的所有内容，包括位于容器上的组件、子容器、布局方式。
	 */
	public void reset();
	/**
	 * 交换布局两个布局位置上的内容（组件或子容器）。当布局位置不存在的情况下抛出RenderException异常。
	 * @param positionA
	 * int,交换的一个位置
	 * @param positionB
	 * int,交换的一个位置
	 * @throws RenderException
	 */
	public void interchange(String positionA, String positionB) throws RenderException;
	/**
	 * 得到布局布局位置上的组件。当布局位置不存在的情况下抛出RenderException异常。当
	 * 布局位置上摆放的不是组件时，抛出RenderException异常。
	 * @param position
	 * int,布局位置
	 * @return
	 * SIComponent，位于布局位置上的组件
	 * @throws RenderException
	 */
	public SIComponent getComponent(String position) throws RenderException;
	/**
	 * 得到布局布局位置上的子容器。当布局位置不存在或布局位置上摆放的不是容器时，抛出RenderException异常。
	 * @param position
	 * int, 布局位置
	 * @return
	 * SIContainer, 位于布局位置上的容器
	 * @throws RenderException
	 */
	public SIContainer getContainer(String position) throws RenderException;
	/**
	 * 将对象转为标准String输出。当该容器的ID为空时，抛出RenderException
	 * @return
	 */
	public String toStandardString() throws RenderException;
}
